home *** CD-ROM | disk | FTP | other *** search
-
- Unit WGFFind; {File Find Object Unit}
- {$I WGDEFINE.INC} { see below for WGDEFINE !! }
-
- Interface
-
- Uses
- {$IFDEF WINDOWS}
- WinDos;
- {$ELSE}
- Dos;
- {$ENDIF}
-
- Const
- {searchtypes}
- stReadOnly=$01;
- stHidden=$02;
- stSysFile=$04;
- stVolumeID=$08;
- stDirectory=$10;
- stArchive=$20;
- stAnyFile=$3F;
-
- Type
- {$IFDEF WINDOWS}
- PathStr=String[128];
- DirStr=String[128];
- NameStr=String[13];
- ExtStr=String[4];
- {$ENDIF}
-
- FindRec=Record
- {$IFDEF WINDOWS}
- SR:TSearchRec;
- TStr:Array[0..180] of Char;
- {$ELSE}
- SR:SearchRec;
- {$ENDIF}
- Dir:DirStr;
- Name:NameStr;
- Ext:ExtStr;
- DError:Word;
- SearchType:Word;
- End;
-
- FindObj = Object
- FI: ^FindRec;
- Constructor Init(ST:Word); {SearchType: Sysfile, AnyFile, Archive}
- Destructor Done;
- Procedure FFirst(FN:String);
- Procedure FNext;
- Function Found:Boolean;
- Function GetName:String;
- Function GetFullPath:String;
- Function GetDate:LongInt;
- Function GetSize:LongInt;
- Function GetAttr:Word;
- End;
-
- Implementation
-
- {$IFDEF WINDOWS}
- Function FExpand(Str:String):String;
- Var
- IStr:Array[0..128] of Char;
- OStr:Array[0..128] of Char;
-
- Begin
- StrPCopy(IStr,Str);
- FileExpand(OStr,IStr);
- FExpand:=StrPas(OStr);
- End;
- {$ENDIF}
-
- {$IFDEF WINDOWS}
- Procedure FSplit(Path:String;Var Dir:String;Var Name:String;Var Ext:String);
- Var
- FPath:Array[0..129] of Char;
- TD:Array[0..129] of Char;
- TN:Array[0..14] of Char;
- TE:Array[0..5] of Char;
-
- Begin
- StrPCopy(FPath,Path);
- FileSplit(FPath,TD,TN,TE);
- Dir:=StrPas(TD);
- Name:=StrPas(TN);
- Ext:=StrPas(TE);
- End;
- {$ENDIF}
-
- Constructor FindObj.Init;
- Begin
- New(FI);
- If FI=Nil then Fail;
- FI^.DError:=1;
- FI^.SearchType:=StArchive+StReadOnly; {default}
- End;
-
- Destructor FindObj.Done;
- Begin
- If FI<>Nil then Dispose(FI);
- End;
-
- Procedure FindObj.FFirst(FN:String);
- Begin
- If FI<>Nil then Begin
- FN:=FExpand(FN);
- FSplit(FN,FI^.Dir,FI^.Name,FI^.Ext);
- {$IFDEF WINDOWS}
- StrPCopy(FI^.TStr, FN);
- FindFirst(FI^.TStr,FI^.SearchType,FI^.SR);
- {$ELSE}
- FindFirst(FN,FI^.SearchType,FI^.SR);
- {$ENDIF}
- FI^.DError:=DosError;
- End
- Else FI^.DError:=1;
- End;
-
- Function FindObj.GetName:String;
- Begin
- GetName:='';
- If FI<>Nil then
- If Found Then
- {$IFDEF WINDOWS}
- GetName:=StrPas(FI^.SR.Name);
- {$ELSE}
- GetName:=FI^.SR.Name;
- {$ENDIF}
- End;
-
- Function FindObj.GetFullPath:String;
- Begin
- If FI<>Nil then GetFullPath:=FI^.Dir+GetName
- Else GetFullPath:='';
- End;
-
- Function FindObj.GetSize:LongInt;
- Begin
- GetSize:=0;
- If FI<>Nil then
- If Found Then GetSize:=FI^.SR.Size;
- End;
-
- Function FindObj.GetDate: LongInt;
- Begin
- GetDate:=0;
- If FI<>Nil then
- If Found Then GetDate:=FI^.SR.Time;
- End;
-
- Function FindObj.GetAttr:Word;
- Begin
- GetAttr:=0;
- If FI<>Nil then
- If Found Then GetAttr:=FI^.SR.Attr;
- End;
-
- Procedure FindObj.FNext;
- Begin
- If FI<>Nil then Begin
- FindNext(FI^.SR);
- FI^.DError:=DosError;
- End
- Else FI^.DError:=1;
- End;
-
- Function FindObj.Found:Boolean;
- Begin
- Found:=(FI^.DError=0);
- End;
-
- End.
-
- [WGDEFINE.INC]
- {$I-}
- {$V-}
- {$S+}
- {$F+}
- {$D-}
- {$L-}
- {$R-}
- {$X+}
-
- {$IFNDEF WINDOWS}
- {$O+} {Make units overlayable}
- {$IFNDEF OS2}
- {$X-} {Turn off extended syntax}
- {$ENDIF}
- {$ENDIF}
-
- {$IFDEF WINDOWS}
- {$DEFINE BASMINT} {Use BASM for interrupts under windows}
- {$ENDIF}
-
- {.$.DEFINE OPRO}
- {.$.DEFINE DEBUG}
- {BBS Definitions below (some that I have tested the new WGMSG*.PAS w/!)}
- {$IFDEF MAXIMUS}
- {$DEFINE SQUISH}
- {$ENDIF}
- {$IFDEF RA2}
- {$DEFINE JAM}
- {$DEFINE HUDSON}
- {$ENDIF}
- {$IFDEF XENOPHOBE}
- {$DEFINE FIDO}
- {$DEFINE SQUISH}
- {$DEFINE JAM}
- {$ENDIF}